package com.dm.cloud.images.service;

import com.dm.cloud.images.common.po.ImagesShard;
import com.dm.cloud.images.mode.fileupload.*;
import com.dm.cloud.tkmybatis.service.BaseEntityService;
import com.dm.cloud.images.common.request.ImagesShardSearchRequest;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
   * @author hcx
   * @type ImagesShardService.java
   * @desc ImagesShard service
   */
public interface ImagesShardService extends BaseEntityService<ImagesShardSearchRequest,ImagesShard> {

    /**
     * 分片上传第一步
     * @param fileUploadShardStartMode
     * @return
     */
    FileUploadShardStartResultMode shardStart(FileUploadShardStartMode fileUploadShardStartMode);

    /**
     * 上传分片文件
     * @param file
     * @param fileKey
     * @param shardNum
     * @return
     */
    Boolean shardUpload(MultipartFile file, String fileKey, Integer shardNum);

    /**
     * 合并分片
     * @param fileUploadMerge
     * @return 返回文件在nfs中的相对路径
     */
    String shardMerge(FileUploadMerge fileUploadMerge);

    /**
     * 获取分享目录下的所有文件
     * @param shardId
     * @return
     */
    List<FileMode> shardFiles(String shardId);

    /**
     * 获取文件内容
     * @param shardId
     * @param filePath
     * @param charCode
     * @return
     */
    String getEditContent(String shardId, String filePath, String charCode);

    /**
     * 保存文件
     * @param saveEditContentMode
     * @return
     */
    Boolean saveEditContent(SaveEditContentMode saveEditContentMode);

    /**
     * 删除共享中的文件、目录
     * @param deleteFileModel
     * @return
     */
    Boolean deleteFile(DeleteFileModel deleteFileModel);

    /**
     * 导出文件 :目录导出压缩包，单个文件则导出文件
     * @param shardId
     * @param filePath
     * @param response
     */
    void export(String shardId, String filePath, HttpServletResponse response);

    /**
     * 如果是共享目录前缀的，返回当前分片的共享目录全路径
     * @param shardPath 共享目录标识符， {shard_xxxx}格式， 如果不是直接返回null ,xxxx是共享目录
     * @param nodeDockerShardDir 指定节点的docker共享根目录全路径
     * @return
     */
    String ifShardReturnRootPath(String shardPath, String nodeDockerShardDir);

    /**
     * 创建目录
     * @param fileMkdir
     * @return
     */
    String shardDir(FileDirMkdir fileMkdir);
}
